home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
MacHack 1994
/
MacHack 1994.toast
/
MacHack™94
/
Talks & Papers
/
Timothy Knox
/
yerk 3.66
/
Module source
/
constants
< prev
next >
Wrap
Text File
|
1994-06-24
|
2KB
|
82 lines
\ as suggested from Michael Hore
:module konstantMod
hex
\ ( addr -- hashVal ) hash a name into a 32-bit word
create HashName
2057 w, \ move.l (sp),a0
d1cb w, \ adda.l a3,a0
7000 w, \ moveq #0,d0 \ Result will go to D0
7400 w, \ moveq #0,d2
1418 w, \ move.b (a0)+,d2 \ Count
c43c007f , \ and.b #127,d2 \ Clear top bit in case it's a name field
60000008 , \ bra lptest
ef98 w, \ loop rol.l #7,d0
1218 w, \ move.b (a0)+,d1
b300 w, \ eor.b d1,d0 \ b300
51cafff8 , \ lptest dbra d2,loop
08c0001f , \ bset #31,d0
2e80 w, \ move.l d0,(sp)
next,
decimal
2600 ordered-col KNAMES
2600 ordered-col KONSTANTS
\ : doHex tib c@ ascii $ = IF hex 2 -> in THEN ;
: doHex ( addr -- addr) @word dup count " $" s= IF drop @word hex ELSE decimal THEN ;
\ ( -- ) Get next word, add if global name
: konstantName { \ val nhash -- }
\ size: konstants .d
doHex
number drop -> val
@word
HashName -> nhash
nhash indexOf: kNames
IF . abort" collision"
ELSE nhash add: kNames val add: konstants
THEN ;
\ read toolbox name/trap table and fill arrays
: Tools" { \ radix cecho -- }
base -> radix decho -> cecho
new: loadFile setName: topFile
openReadOnly: topFile ?error 149
0 moveTo: topFile drop
query: topFile drop
BEGIN \ read until eof
tib c@ ascii \ <> \ skip comments
IF konstantName THEN
query: topFile
UNTIL
-echo
remove: loadFile
radix -> base cecho -> decho ;
\ load the calls into the symbol table
Tools" ::Module source:konstants
CR
size: konstants . ." constants stored" CR
forget doHex
\ ( str255 -- global ) Get global word for a global index
: @konstant ( tStr -- )
HashName indexOf: kNames 0= ?error 150
at: konstants ;
\ global dispatcher
: konstant
@word @konstant
state
IF compile lit ,
THEN
; Immediate
;module